package cn.yuhh.service;

import cn.yuhh.mapper.BrandMapper;
import cn.yuhh.pojo.Brand;
import cn.yuhh.pojo.PageResult;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

@Service
public class BrandService {
    @Autowired
    private BrandMapper brandMapper;
    //请求URL
    //http://api.leyou.com/api/item/brand/page?page=1&rows=5&sortBy=id&desc=false&search=

    /**
     * 分页查询商品分类
     *
     * @param key:         查询的关键字
     * @param page:第几页
     * @param rows:每页显示的条数
     * @param sortBy:排序方式
     * @param desc:是否倒序
     * @return: 商品分类
     */
    public PageResult<Brand> queryBrandsByPage(String key, Integer page, Integer rows, String sortBy, Boolean desc) {
        /**
         * Example类是什么？
         * Example类指定如何构建一个动态的where子句. 表中的每个non-BLOB列可以被包括在where子句中.
         */
        Example example = new Example(Brand.class);

        /**
         * Example类包含一个内部静态类 Criteria 包含一个用 anded 组合在where子句中的条件列表. Example类包含一个 List 属性,
         * 所有内部类Criteria中的子句会用 ored组合在一起. 使用不同属性的 Criteria 类允许您生成无限类型的where子句.
         */
        Example.Criteria criteria = example.createCriteria();

        //关键字模糊查询
        if (StringUtils.isNotBlank(key)) {
            //sql=like name=%key% or letter=key
            criteria.andLike("name", "%" + key + "%").orEqualTo("letter", key);
        }

        //进行分页查询
        PageHelper.startPage(page, rows);

        //设置排序
        if (StringUtils.isNotBlank(sortBy)) {
            example.setOrderByClause(sortBy + " " + (desc ? "desc" : "asc"));
        }

        List<Brand> brands = this.brandMapper.selectByExample(example);

        //包装成pageInfo类
        PageInfo<Brand> pageInfo = new PageInfo<>(brands);

        //包装并返回pageResult类
        return new PageResult<Brand>(pageInfo.getTotal(), pageInfo.getList());
    }
}
